package main

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
)

// bufio按行读取示例
func readBybufio() {
	file, err := os.Open("./main.go")
	if err != nil {
		fmt.Println("open file failed, err:", err)
		return
	}
	defer file.Close()
	reader := bufio.NewReader(file)
	for {
		line, err := reader.ReadString('\n') //注意是字符
		if err == io.EOF {
			if len(line) != 0 {
				fmt.Println(line)
			}
			fmt.Println("文件读完了")
			break
		}
		if err != nil {
			fmt.Println("read file failed, err:", err)
			return
		}
		fmt.Print(line)
	}
}

// ioutil
func writeFileByIoUtil() {
	str := "hello 沙河"
	err := ioutil.WriteFile("./1.txt", []byte(str), 0666)
	if err != nil {
		fmt.Println("write file failed, err:", err)
		return
	}
}

// file
func readByFile() {
	// 只读方式打开当前目录下的main.go文件
	file, err := os.Open("./main.go")
	if err != nil {
		fmt.Println("open file failed!, err:", err)
		return
	}
	// 关闭文件
	defer file.Close()
	//使用for循环读取文件中的所有数据。
	var tmp = make([]byte, 128)
	var content []byte
	for {
		n, err := file.Read(tmp)
		if err == io.EOF {
			fmt.Println("文件读完了")
			break
		}

		if err != nil {
			fmt.Println("read file failed, err:", err)
			return
		}

		content = append(content, tmp[:n]...)
	}

	fmt.Println(string(content))
}

func main() {
	writeFileByIoUtil()
}
